using CustomerManagementSystem.Domain.Entities;
using System.Collections.Generic;
using System.Threading.Tasks;

namespace CustomerManagementSystem.Application;

/// <summary>
/// Service interface for customer management operations
/// </summary>
public interface ICustomerService
{
    /// <summary>
    /// Gets all customers
    /// </summary>
    /// <returns>Collection of customers</returns>
    Task<IEnumerable<Customer>> GetAllCustomersAsync();

    /// <summary>
    /// Gets a customer by ID
    /// </summary>
    /// <param name="id">Customer ID</param>
    /// <returns>Customer if found, otherwise null</returns>
    Task<Customer?> GetCustomerByIdAsync(Guid id);

    /// <summary>
    /// Creates a new customer
    /// </summary>
    /// <param name="customer">Customer data</param>
    /// <returns>Created customer</returns>
    Task<Customer> CreateCustomerAsync(Customer customer);

    /// <summary>
    /// Updates an existing customer
    /// </summary>
    /// <param name="customer">Customer data with updates</param>
    Task UpdateCustomerAsync(Customer customer);

    /// <summary>
    /// Deletes a customer by ID
    /// </summary>
    /// <param name="id">Customer ID to delete</param>
    Task DeleteCustomerAsync(Guid id);
}
